import numpy as np
from matplotlib import pyplot as plt


def main():
    array1 = np.random.randint(1, 100, 10)
    print(f'array1: {array1}')
    # 合计
    print(array1.sum())
    # 合计
    print(np.sum(array1))
    # 平均数
    print(array1.mean())
    # 平均数
    print(np.mean(array1))
    # 中位数
    print(np.median(array1))
    # 中位数
    print(np.quantile(array1, 0.5))

    print(array1.max())
    print(np.amax(array1))
    print(array1.min())
    print(np.amin(array1))
    print(array1.ptp())
    print(np.ptp(array1))
    q1, q3 = np.quantile(array1, [0.25, 0.75])
    print(q3 - q1)

    print(array1.var())
    print(np.var(array1))
    print(array1.std())
    print(np.std(array1))
    print(array1.std() / array1.mean())


def main2():
    array2 = np.random.randint(60, 101, (5, 3))
    print(f'array2: {array2}')
    plt.boxplot(array2, showmeans=True)
    plt.ylim([-20, 120])
    plt.show()


"""
all() / any()方法：判断数组是否所有元素都是True / 判断数组是否有为True的元素。
astype()方法：拷贝数组，并将数组中的元素转换为指定的类型。
reshape()方法：调整数组对象的形状。
dump()方法：保存数组到二进制文件中，可以通过 NumPy 中的load()函数从保存的文件中加载数据创建数组。
tofile()方法：将数组对象写入文件中。
fill()方法：向数组中填充指定的元素。
flatten()方法：将多维数组扁平化为一维数组。
nonzero()方法：返回非0元素的索引。
round()方法：对数组中的元素做四舍五入操作。
sort()方法：对数组进行就地排序。
swapaxes()和transpose()方法：交换数组指定的轴和转置。
tolist()方法：将数组转成 Python 中的list。
"""


def main3():
    array = np.random.randint(60, 101, 10)
    print(f'array: {array}')
    array.dump('array1-data')
    array3 = np.load('array1-data', allow_pickle=True)
    print(f'array3: {array3}')
    array3.tofile('array.txt', sep=',')
    array3.flatten()
    print(array3.tolist())
    # 将一维数组转换为二维数组
    array5 = array3.reshape(-1, 1)  # 转换为列向量
    print("Reshaped array:")
    print(f'array5: {array5}')
    array5.swapaxes(0, 1)
    print(f'array3: {array3}')
    array4 = array3.transpose()
    print(f'array4: {array4}')


if __name__ == '__main__':
    main3()
